package org.example.controller;

import org.example.entity.User;
import org.example.service.MessageProducerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

// 声明这是一个 RESTful 风格的控制器，用于处理 HTTP 请求并返回 JSON 或 XML 等数据
@RestController
public class SendMessageController {

    // 通过 Spring 的依赖注入机制，将 MessageProducerService 实例注入到当前控制器中
    @Autowired
    MessageProducerService messageProducerService;

    /**
     * 处理 /user/{id}/{username} 路径的请求，用于创建消息并发送到消息队列
     *
     * @param id       用户 ID，从路径变量中获取
     * @param username 用户姓名，从路径变量中获取
     * @return 提示信息，表明消息已发出
     */
    @RequestMapping("/user/{id}/{username}")
    public String createMessageQueue(@PathVariable("id") int id, @PathVariable("username") String username) {
        // 创建一个 User 对象，将从路径中获取的 id 和 username 传入
        User user = new User(id, username);
        // 调用 MessageProducerService 中的 psubPublisher 方法，将 User 对象作为消息发送到消息队列
        messageProducerService.psubPublisher(user);
        // 返回提示信息，告知用户消息已发出
        return "消息已发出";
    }

    /**
     * 处理 /test/{message} 路径的请求，将消息以指定的路由规则发送到消息队列
     *
     * @param message 要发送的消息内容，从路径变量中获取
     * @return 提示信息，表明消息已发出
     */
    @RequestMapping("/test/{message}")
    public String routingPublisher(@PathVariable("message") String message) {
        // 调用 MessageProducerService 中的 routingPublisher 方法，将消息发送到消息队列
        messageProducerService.routingPublisher(message);
        // 返回提示信息，告知用户消息已发出
        return "消息已发出";
    }

    /**
     * 处理 /test2/{message} 路径的请求，将消息以另一种指定的路由规则发送到消息队列
     *
     * @param message 要发送的消息内容，从路径变量中获取
     * @return 提示信息，表明消息已发出
     */
    @RequestMapping("/test2/{message}")
    public String routingPublisher2(@PathVariable("message") String message) {
        // 调用 MessageProducerService 中的 routingPublisher2 方法，将消息发送到消息队列
        messageProducerService.routingPublisher2(message);
        // 返回提示信息，告知用户消息已发出
        return "消息已发出";
    }

    /**
     * 处理 /test3/{key}/{message} 路径的请求，将消息以指定的自定义路由键发送到消息队列
     *
     * @param key     自定义的路由键，从路径变量中获取
     * @param message 要发送的消息内容，从路径变量中获取
     * @return 提示信息，表明消息已发出
     */
    @RequestMapping("/test3/{key}/{message}")
    public String routingPublisher3(@PathVariable("key") String key, @PathVariable("message") String message) {
        // 调用 MessageProducerService 中的 routingPublisher3 方法，将消息和自定义路由键一起发送到消息队列
        messageProducerService.routingPublisher3(key, message);
        // 返回提示信息，告知用户消息已发出
        return "消息已发出";
    }

    /**
     * 处理 /topic/{key}/{message} 路径的请求，将消息以主题模式发送到消息队列
     *
     * @param key     主题模式的路由键，从路径变量中获取
     * @param message 要发送的消息内容，从路径变量中获取
     * @return 提示信息，表明消息已发出
     */
    @RequestMapping("/topic/{key}/{message}")
    public String topicPublisher1(@PathVariable("key") String key, @PathVariable("message") String message) {
        // 调用 MessageProducerService 中的 TopicPublisher 方法，将消息和主题路由键一起发送到消息队列
        messageProducerService.TopicPublisher(key, message);
        // 返回提示信息，告知用户消息已发出
        return "消息已发出";
    }
}
